#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
@file constants.py
@brief 电机控制器常量定义模块
@details 定义电机控制器中使用的所有常量，包括寄存器地址、控制命令、系统模式等
@author Motor Controller Team
@date 2024
"""

# 寄存器地址定义
class RegisterAddress:
    """寄存器地址常量类"""
    
    # 电机控制寄存器（基于实际demo代码）
    RIGHT_MOTOR_SPEED = 0x31      # 右电机速度控制寄存器
    LEFT_MOTOR_SPEED = 0x36       # 左电机速度控制寄存器
    RIGHT_MOTOR_DIRECTION = 0x32  # 右电机方向控制寄存器
    LEFT_MOTOR_DIRECTION = 0x37   # 左电机方向控制寄存器
    SYSTEM_CONTROL = 0x30         # 系统控制寄存器
    
    # 状态寄存器
    RIGHT_MOTOR_STATUS = 0x40     # 右电机状态寄存器
    LEFT_MOTOR_STATUS = 0x41      # 左电机状态寄存器
    SYSTEM_STATUS = 0x42          # 系统状态寄存器
    ERROR_CODE = 0x43             # 错误代码寄存器


# 控制命令定义
class ControlCommands:
    """控制命令常量类"""
    
    STOP = 0x00           # 停止命令
    START = 0x01          # 启动命令
    EMERGENCY_STOP = 0x02 # 急停命令
    PHASE_LEARNING = 0x03 # 相序学习命令
    RESET = 0x04          # 复位命令


# 电机方向定义
class MotorDirection:
    """电机方向常量类"""
    
    FORWARD = 0x01        # 正转
    REVERSE = 0x00        # 反转
    STOP = 0x00           # 停止


# 系统模式定义
class SystemMode:
    """系统模式常量类"""
    
    INDEPENDENT_SPEED_CLOSED_LOOP = 0    # 独立速度闭环
    INDEPENDENT_SPEED_OPEN_LOOP = 1      # 独立速度开环
    SAME_SOURCE_SPEED_CLOSED_LOOP = 2    # 同源速度闭环
    SAME_SOURCE_SPEED_OPEN_LOOP = 3      # 同源速度开环
    DIFFERENTIAL_SPEED_CLOSED_LOOP = 4   # 差速闭环


# 通信参数默认值
class CommunicationDefaults:
    """通信参数默认值类"""
    
    DEFAULT_PORT = 'COM4'         # 默认串口（Windows）
    DEFAULT_BAUDRATE = 9600       # 默认波特率
    DEFAULT_DEVICE_ID = 1         # 默认设备ID
    DEFAULT_TIMEOUT = 1.0         # 默认超时时间(秒)
    DEFAULT_BYTESIZE = 8          # 默认数据位
    DEFAULT_PARITY = 'N'          # 默认校验位
    DEFAULT_STOPBITS = 1          # 默认停止位


# 电机参数默认值
class MotorDefaults:
    """电机参数默认值类"""
    
    DEFAULT_SPEED = 500           # 默认转速
    MAX_SPEED = 1000             # 最大转速
    MIN_SPEED = 0                # 最小转速
    DEFAULT_ACCELERATION = 100   # 默认加速度
    DEFAULT_DECELERATION = 100   # 默认减速度


# 状态码定义
class StatusCodes:
    """状态码常量类"""
    
    SUCCESS = 0x00               # 成功
    ERROR_CONNECTION = 0x01      # 连接错误
    ERROR_COMMUNICATION = 0x02   # 通信错误
    ERROR_INVALID_PARAMETER = 0x03  # 参数错误
    ERROR_MOTOR_FAULT = 0x04     # 电机故障
    ERROR_OVERLOAD = 0x05        # 过载
    ERROR_OVERVOLTAGE = 0x06     # 过压
    ERROR_UNDERVOLTAGE = 0x07    # 欠压
    ERROR_OVERCURRENT = 0x08     # 过流
    ERROR_OVERTEMPERATURE = 0x09 # 过温


# 日志级别定义
class LogLevels:
    """日志级别常量类"""
    
    DEBUG = 10
    INFO = 20
    WARNING = 30
    ERROR = 40
    CRITICAL = 50
